package cn.kgm.file;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * @Version 1.8
 * @Author: Kappi
 * @Date: 2025-9-5 16:51
 * @Description: cn.kgm.file.FileRead
 */
public class FileRead {

    public static void main(String[] args) {
        // 指定要遍历的目录路径
        String directoryPath = "D:\\瞳的传说";
        try {
            traverseAndRenameDocxFiles(directoryPath);
            System.out.println("所有.docx文件名修改完成！");
        } catch (Exception e) {
            System.err.println("处理过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 递归遍历目录并重命名.docx文件
     *
     * @param directoryPath 要遍历的目录路径
     */
    public static void traverseAndRenameDocxFiles(String directoryPath) {
        File directory = new File(directoryPath);

        // 检查目录是否存在
        if (!directory.exists() || !directory.isDirectory()) {
            System.err.println("指定的目录不存在或不是一个目录: " + directoryPath);
            return;
        }

        // 获取目录中的所有文件和子目录
        File[] files = directory.listFiles();

        if (files == null) {
            System.err.println("无法访问目录内容: " + directoryPath);
            return;
        }

        for (File file : files) {
            if (file.isDirectory()) {
                // 如果是目录，递归遍历
                traverseAndRenameDocxFiles(file.getAbsolutePath());
            } else {
                // 如果是文件，检查是否为.docx文件
                if (file.getName().toLowerCase().endsWith(".docx")) {
                    renameDocxFile(file);
                }
            }
        }
    }

    /**
     * 重命名.docx文件：在文件名最前面添加"📄 "
     *
     * @param docxFile 要重命名的.docx文件
     */
    private static void renameDocxFile(File docxFile) {
        try {
            // 获取文件所在目录
            String parentDir = docxFile.getParent();

            // 获取原文件名
            String originalName = docxFile.getName();

            // 构造新文件名（在文件名前添加"📄 "）
            String newName = "📄 " + originalName;

            // 构造新文件的完整路径
            Path sourcePath = docxFile.toPath();
            Path targetPath = Paths.get(parentDir, newName);

            // 检查目标文件是否已存在
            if (Files.exists(targetPath)) {
                System.err.println("目标文件已存在，跳过重命名: " + targetPath);
                return;
            }

            // 执行重命名操作
            Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("重命名: " + originalName + " -> " + newName);

        } catch (Exception e) {
            System.err.println("重命名文件时出错: " + docxFile.getAbsolutePath() + " - " + e.getMessage());
        }
    }
}
